package wiki.liven.service;

import wiki.liven.Exception.RepeatkillException;
import wiki.liven.Exception.SeckillClosedException;
import wiki.liven.dto.Exposer;
import wiki.liven.dto.SecKillExcution;
import wiki.liven.pojo.Seckill;

import java.util.List;

/**
 * Created by leven on 2016/10/16.
 * 秒杀业务
 */
public interface SeckillService {

    /**
     * 查询所有秒杀产品
     *
     * @return 秒杀产品列表
     */
    List<Seckill> findAll();

    /**
     * 查询单个秒杀产品
     *
     * @param secKillId 秒杀产品ID
     * @return 单个秒杀产品实体
     */
    Seckill findOne(Long secKillId);

    /**
     * 当秒杀活动开始的时候，输出秒杀地址；
     * 当秒杀活动没有开始时，返回倒计时和秒杀开启时间
     *
     * @param seckillId
     * @return 输出秒杀URLDTO
     */
    Exposer exportSecKillUrl(Long seckillId);

    /**
     * 执行秒杀业务
     *
     * @param secKillId
     * @param userPhone
     * @param md5
     * @return
     * @throws RepeatkillException    重复秒杀异常
     * @throws SeckillClosedException 秒杀活动关闭异常
     */
    SecKillExcution executeSecKill(Long secKillId, String userPhone, String md5) throws RepeatkillException, SeckillClosedException;


}
